package com.example.luozizhao.eprxdemo.ui.activity;

import android.os.Bundle;
import android.util.Log;
import android.widget.Button;

import com.blankj.utilcode.util.ToastUtils;
import com.example.luozizhao.eprxdemo.R;
import com.example.luozizhao.eprxdemo.base.activity.BaseActivity;
import com.example.luozizhao.eprxdemo.http.RetrofitHelper;
import com.example.luozizhao.eprxdemo.net.bean.face.TokenRespon;
import com.example.luozizhao.eprxdemo.utils.RxUtils;

import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import io.reactivex.functions.Consumer;

/**
 * Created by luozizhao on 2018/5/16.
 */

public class MainActivity extends BaseActivity {

    @BindView(R.id.btn_get_access_token)
    Button btnGetAccessToken;
    private static String TAG = "MainActivity";

    @Override
    public int getLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    public void initData() {
        String grant_type = "client_credentials";
        String client_id = "qoFNAMt1vm8Dg1aN7wXZjlLy";
        String client_secret = "kod3hChDZsBUKGNezVFhX6jqyWvaCpUz ";


        new Thread(new Runnable() {
            @Override
            public void run() {
                AuthService.getAuth();
            }
        }).start();

        /*RetrofitHelper.getInstance().getToken(grant_type,client_id,client_secret)
        .compose(RxUtils.rxSchedulerHelper())
        .subscribe(new Consumer<TokenRespon>() {
            @Override
            public void accept(TokenRespon tokenRespon) throws Exception {
                if (tokenRespon==null) {
                    Log.d(TAG, "accept: "+tokenRespon);
                    return;
                }
                Log.d(TAG, "accept: "+tokenRespon.toString());
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable throwable) throws Exception {
                Log.d(TAG, "accept: "+throwable.getMessage());
            }
        });*/
    }


    /**
     * 获取token类
     */
    public static class AuthService {

        /**
         * 获取权限token
         * @return 返回示例：
         * {
         * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567",
         * "expires_in": 2592000
         * }
         */
        public static String getAuth() {
            // 官网获取的 API Key 更新为你注册的
            String clientId = "qoFNAMt1vm8Dg1aN7wXZjlLy";
            // 官网获取的 Secret Key 更新为你注册的
            String clientSecret = "kod3hChDZsBUKGNezVFhX6jqyWvaCpUz";
            return getAuth(clientId, clientSecret);
        }

        /**
         * 获取API访问token
         * 该token有一定的有效期，需要自行管理，当失效时需重新获取.
         * @param ak - 百度云官网获取的 API Key
         * @param sk - 百度云官网获取的 Securet Key
         * @return assess_token 示例：
         * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
         */
        public static String getAuth(String ak, String sk) {
            // 获取token地址
            String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
            String getAccessTokenUrl = authHost
                    // 1. grant_type为固定参数
                    + "grant_type=client_credentials"
                    // 2. 官网获取的 API Key
                    + "&client_id=" + ak
                    // 3. 官网获取的 Secret Key
                    + "&client_secret=" + sk;
            try {
                URL realUrl = new URL(getAccessTokenUrl);
                // 打开和URL之间的连接
                HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
                connection.setRequestMethod("GET");
                connection.connect();
                // 获取所有响应头字段
                Map<String, List<String>> map = connection.getHeaderFields();
                // 遍历所有的响应头字段
                for (String key : map.keySet()) {
                    System.err.println(key + "--->" + map.get(key));
                }
                // 定义 BufferedReader输入流来读取URL的响应
                BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String result = "";
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
                /**
                 * 返回结果示例
                 */
                Log.d(TAG, "getAuth: "+result);
                System.err.println("result:" + result);
                JSONObject jsonObject = new JSONObject(result);
                String access_token = jsonObject.getString("access_token");
                return access_token;
            } catch (Exception e) {
                System.err.printf("获取token失败！");
                Log.d(TAG, "获取token失败！: ");
                e.printStackTrace(System.err);
            }
            return null;
        }

    }


    @Override
    protected void initInject() {

    }



    @OnClick(R.id.btn_get_access_token)
    public void onViewClicked() {

    }
}
